As is known, computer graphics processing systems process large amounts of data, including texture, among others. A texture is a digital image, often rectangular in shape, having a (U,V) coordinate space. The smallest addressable unit of a texture is a texel, which is assigned a specific (U,V) coordinate based on its location. In a texture mapping operation, a texture is mapped to the surface of a graphical model as the model is rendered to create a destination image. In the destination image, pixels are located at specific coordinates in the XY coordinate system.
Texture data often resides in system memory, which is a shared resource. In many computer systems, other devices may attempt to access data used by the graphics processing system or utilize a shared system bus, both of which may result in increased data access time for the graphics processing system. Additionally, requests for data from system memory may take excessive amounts of time for other reasons. Accordingly, accessing system memory may have a performance inhibiting effect on graphics processing systems.
One technique for improving data accessibility is through a graphics cache that is dedicated to storing graphics data. The graphics cache is provided graphics data from the system memory before the data is required for graphics processing, thereby providing the graphics system with the graphics data and reducing the requirement to access system memory. This, in turn, reduces problems associated with memory latency.
A graphics cache, however, generally lacks the capacity to store the entire texture map. A graphics cache sufficient to store an entire texture map would likely suffer from reduced performance because cache access time generally increases as the cache size increases. Further, an increased cache size requires more chip resources, which are often already at a premium.
One common approach to increasing cache size without significantly degrading cache performance is to provide two-level caches. The first level in a two-level cache is provided for the data that is most likely to be immediately required, whereas the second level stores data more likely to be used in the near future. A two-level cache provides benefits in terms of increased cache size without a significant decrease in cache performance by providing benefits in terms of increased data availability and decreased memory access time. The use of a two-level cache does create issues regarding the selection and transfer of the data to the cache system, as well as the deletion of data from the cache system. Thus, without an appropriate determination of which data to request, transfer, and delete, however, the benefits of a two-level cache system may be reduced.
In other words, an efficient technique must be established for allocating cache spatial and temporal resources, such that the texture data required for processing by, for example, a texture filter, is available and complete in the cache system. For instance, texture data is received from system memory in a multitude of different formats and sizes. Failure to consider the size or configuration of the data results in inefficient use of the cache system resources. One source of inefficiency occurs when the logic for loading data into a cache is not optimized for the size or configuration of the data, which results in the overwriting or trashing of valid data. Determining an efficient technique for allocating the locations for incoming data will address the need for fast processing of graphics data in a computer graphics environment.
Thus, a heretofore-unaddressed need exists in the industry to address the aforementioned deficiencies and inadequacies.